package com.zhu.instructions.math;

import com.zhu.instructions.base.NoOperandsInstruction;
import com.zhu.rtda.Frame;
import com.zhu.rtda.OperandStack;

/**
 * LAND 指令
 *
 * 操作码：land (long)
 * 栈行为：value1, value2 → result
 *
 * 功能：从操作数栈中弹出两个 long 类型的操作数，
 * 计算它们的按位与（&），并将结果压回栈顶。
 *
 * 注意：long 类型占 64 位，在栈中占用一个槽位（slot），
 * 但在某些 JVM 实现中需注意对齐，不过在我们的模拟器中统一处理。
 */
public class LAND extends NoOperandsInstruction {

    @Override
    public void execute(Frame frame) {
        // 获取操作数栈
        OperandStack operandStack = frame.getOperandStack();

        // 弹出两个 long 值
        long v2 = operandStack.popLong();
        long v1 = operandStack.popLong();

        // 执行按位与操作
        long result = v1 & v2;

        // 将结果压回栈顶
        operandStack.pushLong(result);
    }
}
